﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel.DataAnnotations;
using System.Web.Mvc;
using ITProject.Domain.Entities;

namespace ITProject.WebUI.Models.ProjectAdmin
{
    public class ProjectAdminAddNewFeatureViewModel
    {
        [Display(Name="Nazwa")]
        [Required(ErrorMessage="Nazwa funkcjonalności jest wymagana")]
        [MinLength(4,ErrorMessage="Nazwa funkcjonalności musi posiadać conajmniej 4 znaki")]
        [MaxLength(50, ErrorMessage = "Nazwa funkcjonalności nie może posiadać więcej niż 50 znaków")]
        public string Name { get; set; }
        [Display(Name="Opis")]
        public string Description { get; set; }
        [Display(Name = "Planowana data ukończenia funkcjonalności")]
        [Required(ErrorMessage = "Podanie planowanej daty ukończenia jest wymagane")]
        public DateTime PlannedEndDate { get; set; }
        [Required(ErrorMessage = "Musisz podać status funckjonalności")]
        [Display(Name = "Status funkcjonalności")]
        public string ReturnStatus { get; set; }
        [Display(Name = "Priorytet")]
        [Required(ErrorMessage = "Musisz wybrać priorytet funkcjonalności")]
        public string ReturnPriority { get; set; }
        [Display(Name = "Zleć uczestnikowi")]
        public bool IsToUser { get; set; }
        [Display(Name = "Uczestnik odpowiedzialny z funkcjonalność")]
        public string ReturnUser { get; set; }
        [Display(Name = "Zespół odpowiedzialny z funkcjonalność")]
        public string ReturnTeam { get; set; }
        [Display(Name = "Przypisanie do wersji")]
        public string ReturnVersion { get; set; }

        public const string NoRelease = "Brak przypisania do wersji"; 

        //ustawiane przez kontroler i ukryte
        public string ProjectName { get; set; }

        public static List<SelectListItem> StatusList;
        public PriorityViewModel PriorityList
        {
            get { return pvm; }
        }
        public List<SelectListItem> ReleaseList;
        public List<SelectListItem> TeamList;
        public List<SelectListItem> UserList;

        private PriorityViewModel pvm = new PriorityViewModel();

        static ProjectAdminAddNewFeatureViewModel()
        {
            StatusList = new List<SelectListItem>();
            StatusList.Add(new SelectListItem { Text = StatusName.Active });
            StatusList.Add(new SelectListItem { Text = StatusName.Planned });
            StatusList.Add(new SelectListItem { Text = StatusName.Done });
            StatusList.Add(new SelectListItem { Text = StatusName.Tested });
            StatusList.Add(new SelectListItem { Text = StatusName.Accepted });
        }

        public ProjectAdminAddNewFeatureViewModel()
        {
            IsToUser=true;
        }

        public static Feature Convert(ProjectAdminAddNewFeatureViewModel vm, int projectId, int? releaseId=null)
        {
            Feature feature = new Feature();
            feature.Description = vm.Description;
            feature.Name = vm.Name;
            feature.Priority = (byte)PriorityViewModel.ConvertFromString(vm.ReturnPriority);
            feature.StartDate = DateTime.Now;
            feature.PlannedEndDate = vm.PlannedEndDate;
            feature.Status = (byte)StatusName.ConvertFromString(vm.ReturnStatus);
            feature.IsToTeam = !vm.IsToUser;
            feature.ReleaseId = releaseId;
            feature.ProjectId = projectId;
            return feature;
        }
        
    }
}